#include<stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include<string.h>

/*
 *
receiv msg type = 1, buf = this msg type 1
receiv msg type = 2, buf = this msg type 2


 */

typedef struct{
	long msg_type;
	char buf[128];
}msgT;

#define MSGLEN (sizeof(msgT)-sizeof(long))

int main(){
	int msgid;
	key_t key;
	msgT msg;
	int ret;

	//创建key
	key = ftok(".", 100);
	if(key < 0){
		perror("ftok");
		return 0;
	}

	//打开/创建消息队列
	msgid = msgget(key, IPC_CREAT|0666);
	if(msgid < 0){
		perror("msgget");
		return 0;
	}

	while(1){
		//接收消息,只接收消息类型小于等于2的消息
		ret = msgrcv(msgid, &msg, MSGLEN, -2, 0);
		if(ret < 0){
			perror("msgrcv");
			return 0;
		}

		//打印消息
		printf("receiv msg type = %ld, buf = %s\n", msg.msg_type, msg.buf);
	}

	//删除消息队列
	ret = msgctl(msgid, IPC_RMID, NULL);
	if(ret < 0){
		perror("msgctl");
		return 0;
	}
}

